﻿using System;
using System.Diagnostics;

namespace Kyoh.App.Crawler.Contents
{
    class Anchors : SeedListComponent<Anchor>
    {
        public const string AnchorsSaveName = "Anchors.dat";

        public Anchors()
            : base(AnchorsSaveName)
        {
        }

        public Parsers Parsers { get; set; }
        public Loaders Loaders { get; set; }
        public Seekers Seekers { get; set; }
        public Redirects Redirects { get; set; }
        protected override void RunCore(Anchor seed)
        {
            if (Parsers == null)
                Debug.Fail("アンカーにパーサーが関連づけされていません。");
            if (Loaders == null)
                Debug.Fail("アンカーにローダーが関連づけされていません。");
            if (Redirects == null)
                Debug.Fail("アンカーにリダイレクトが関連づけされていません。");

            foreach (var pageUri in Seekers.GetPages(seed))
            {
                var loader = Parsers.Parse(Redirects.Parse(pageUri));
                try { Loaders.Add(loader); }
                catch (Exception exc)
                {
                    Trace.TraceError(Properties.Strings.ErrorAddSeed, Properties.Strings.Anchor, seed.UniqueKey);
                    Debug.WriteLine(exc);
                }
            }
        }

        protected override void Cancel(Anchor seed) { }
    }
}